GNU parallel

Parallel
Developer(s) GNU project
Stable release 20111122[1] / November 22, 2011; 3 months ago (2011-11-22)
Written in Perl
Operating system GNU
Type Utility
License GPLv3
Website savannah.gnu.org/projects/parallel/

GNU parallel is a command-line driven utility for Linux or other Unix-like operating systems which allows the user to execute shell scripts in parallel. GNU parallel is a free software, written in Perl. It is available[2] under the terms of GPLv3.

Contents

Usage

The most common usage is to replace the shell loop, for example

   (for x in `cat list` ; do 
       do_something $x
   done) | process_output

to the form of

   cat list | parallel do_something | process_output

where the file list contains arguments for do_something and where process_output may be empty.

Scripts using parallel are often easier to read than scripts using pexec.

The program parallel features also

By default, parallel runs 9 jobs in parallel, but using -j+0 parallel can be made to detect the number of CPUs and use all of them.

An introduction video to GNU Parallel can be found on Wikimedia Commons.

Examples

 find . -name "*.foo" | parallel grep bar

The above is equivalent to:

 grep bar $(find . -name "*.foo")

This searches in all files in the current directory and its subdirectories which end in .foo for occurrences of the string bar. The parallel command will work as expected unless a file name contains a newline. In order to avoid this limitation one may use:

 find . -name "*.foo" -print0 | parallel -0 grep bar

The above command uses GNU specific extensions to find to separate filenames using the null character;

 find . -name "*.foo" | parallel -X mv {} /tmp/trash

The above command uses {} to tell parallel to replace {} with the argument list.

 find . -maxdepth 1 -type f -name "*.ogg" | parallel -X -r cp -v -p {} /home/media

The command above does the same as:

 cp -v -p *.ogg /home/media

however, the former command which uses find/parallel/cp is more resource efficient and will not halt with an error if the expansion of *.ogg is too large for the shell.

See also

References

External links